In the cloud, applications are distributed and deployed over virtual resources that are dynamically provisioned and mapped to a pool of physical servers that are allowed to communicate in some manner through some type of physical network. From a customer perspective, the virtual resources are typically virtual machines that execute customer applications. The machines are “virtual” in the sense that 1) the underlying physical servers on which the virtual machines are operating can change over time (migration), 2) a variable number of virtual machines are running on the same physical server, sharing the underlying processor, memory, disk and network interface capabilities (sharing). Using the abstraction of a virtual machine, the changing nature of the physical servers is opaque to customer applications, yet, can cause the applications to experience variable and unpredictable performance.
The customer applications often include components that execute on different virtual machines that need to communicate with one another to complete a particular task. Thus, a virtual network is formed between the virtual machines where the performance of the virtual resources, including both the virtual network and the virtual machines, affects how quickly the particular task is completed within the customer application. The performance of the virtual resources is constantly changing and is difficult to characterize as the underlying physical resources are constantly changing. In addition, for a particular customer application, how the application interacts with the virtual resources affects the perceived performance of the virtual resources from the point of view of the application. This coupling between the application and the resources adds additional complexity to the performance characterization problem.
Every customer utilizing cloud resources wants to ensure that their applications are sufficiently optimized to meet the demands of their business at all times while not wasting resources. Currently, resource management tools are very limited or non-existent. In view of the above, new methods and apparatus for application specific cloud resource management are needed.